package com.ynet.middleground.contract.service;

import java.util.List;

import javax.validation.Valid;

import com.ynet.core.common.ServiceResult;
import com.ynet.middleground.contract.bean.*;
import com.ynet.middleground.contract.dto.TemplateDTO;
import com.ynet.middleground.contract.dto.TemplateDetailDTO;

/**
 * @description: 合约模板接口
 * @author: yangbh
 **/
public interface TemplateService {

    /**
     * 新增合约模板
     * 
     * @param addTemplateReq 新增模板请求类
     * @return 新增模板成功后的模板 id
     */
    ServiceResult<Integer> addTemplate(@Valid AddTemplateReq addTemplateReq);

    /**
     * 分页查询合约模板列表
     * 
     * @param queryTemplateReqPager 分页查询模板信息请求类
     * @return 模板列表
     */
    ServiceResult<List<TemplateDTO>> listTemplate(@Valid QueryTemplateReqPager queryTemplateReqPager);

    /**
     * 根据模板 id 查询模板详情信息
     * 
     * @param queryTemplateReq 查询指定模板详情信息请求对象
     * @return 模板详情信息
     */
    ServiceResult<TemplateDetailDTO> getTemplateById(@Valid QueryTemplateReq queryTemplateReq);

    /**
     * 根据模板 id 删除指定模板
     * 
     * @param deleteTemplateReq 删除模板请求类
     * @return 结果标志，以 success 字段值标识 true/false
     */
    ServiceResult deleteTemplateById(@Valid DeleteTemplateReq deleteTemplateReq);

    /**
     * 根据模板 id 更新模板基础信息
     * 
     * @param updateTemplateReq 修改模板基础信息请求类
     * @return 结果标志，以 success 字段值标识 true/false
     */
    ServiceResult updateTemplateById(@Valid UpdateTemplateReq updateTemplateReq);

    /**
     * 判断模板是否可以变更为其他状态
     *
     * @param req 查询模板是否符合激活或停用的条件
     * @return 结果标志，以 success 字段值标识 true/false
     */
    ServiceResult<Object> checkTemplateCondition(@Valid QueryTemplatesConditionReq req);

    /**
     * 激活模板 <br />
     * <note> 该接口保留勿删，为防止 dubbo 形式调用，不开放 </note>
     * 
     * @param updateTemplateStatusReq 更新模板状态请求类
     * @return 结果标志，以 success 字段值标识 true/false
     */
    // ServiceResult activeTemplate(@Valid UpdateTemplateStatusReq updateTemplateStatusReq);

    /**
     * 停用模板 <br />
     * <note> 该接口保留勿删，为防止 dubbo 形式调用，不开放 </note>
     * 
     * @param updateTemplateStatusReq 更新模板状态请求类
     * @return 结果标志，以 success 字段值标识 true/false
     */
    // ServiceResult disableTemplate(@Valid UpdateTemplateStatusReq updateTemplateStatusReq);

    /**
     * 根据模板生成合约 <br />
     * <note> 该接口仅供测试 poi-tl 引擎生成 word 文件使用，保留勿删，为防止 dubbo 形式调用，不开放 </note>
     * 
     * @param templateCommReq 生成合约的请求体信息
     * @return 合约生成信息
     */
    // ServiceResult<String> generate(@Valid TemplateCommReq templateCommReq);

    /**
     * 更新合约模板状态
     *
     * @param updateTemplateStatusForChannelReq 更新合约模板状态请求类
     * @return 新增模板成功后的模板 id
     */
    ServiceResult updateTemplateStatusById(@Valid UpdateTemplateStatusForChannelReq updateTemplateStatusForChannelReq);

}
